/**
 * eslint 会把代码解析成 AST 语法树，然后我们通过 AST 去实现我们的自定义规则！
 * eslint 开发的话一般是将自定义的rules放到一个eslint-plugin中当成一个rule集合使用
 * plugin的命名规则需要按照官网的要求来即：eslint-plugin-<pluginName>
 * 使用的时候在.eslintrc.js先添加plugin到plugins数组中这时候直接pluginName就行了
 * 配置rules时名称为pluginName/rule(plugin中暴露出来的rule名)
 * 测试直接node <测试的文件>
 * 在项目中测试：在插件目录下使用npm link将插件链接到全局（包名为插件的package.json的name），回到项目根目录npm link <插件的package.json的name>
 */

module.exports = {
  meta: {
    type: "layout",

    docs: {
      description: "disallow unnecessary semicolons",
      category: "Possible Errors",
      recommended: true,
      url: "https://eslint.org/docs/rules/no-extra-semi"
    },
    fixable: "code",
    schema: [{
        enum: ["always", "never"]
      },
      {
        type: "object",
        properties: {
          exceptRange: {
            type: "boolean"
          }
        },
        additionalProperties: false
      }
    ],
    messages: {
      avoidName: "Avoid using variables named '{{ name }}'"
    }
  },
  create: function (context) {
    // console.log('create', context)
    return {
      // visitor: function(path) {
      //   console.log(path, 'visitor')
      // },
      // Identifier: function(path) {
      //   console.log(path, 'Identifier')
      // }
      Identifier: function (node) {
        if (node.name === "foo") {
          console.log('6y64453453aaaaaaaaaaaaaaa45245', node)
          context.report({
            node,
            messageId: "avoidName",
            data: {
              name: "foo",
            },
            // fix: function (fixer) {
            //   return fixer.insertTextAfter(node, ";");
            // }
          });
        }
      }
    }
  }
}
